﻿using System.Collections.Generic;
using System.Web;

/**
 * ShoppingCart class
 * 
 * Lưu trữ sản phẩm đã mua và thực hiện một số các phương thức khác
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MLM.Data;
using MLM.AdminCP.Class;

namespace MLM
{
    public static partial class MLM
    {
        public class ShoppingCart
        {
            #region Properties

            public List<CartItem> Items { get; private set; }

            #endregion

            #region Singleton Implementation

            public static readonly ShoppingCart Instance;
            // Hàm khởi tạo
            static ShoppingCart()
            {
                // Nếu chưa có session chưa giỏ hàng, thì khởi tạo và đưa thông tin giỏ hàng vào 
                // ngược lại thì lấy thông tin trong giỏ hàng
                if (HttpContext.Current.Session["ASPNETShoppingCart"] == null)
                {
                    Instance = new ShoppingCart();
                    Instance.Items = new List<CartItem>();
                    HttpContext.Current.Session["ASPNETShoppingCart"] = Instance;
                }
                else
                {
                    Instance = (ShoppingCart) HttpContext.Current.Session["ASPNETShoppingCart"];
                }
            }

            protected ShoppingCart()
            {
            }

            #endregion

            #region Item Modification Methods

            /**
	 * AddItem() - Add một item vào trong giỏ hàng
	 */

            public void AddItem(long productId,long CountProduct,long CountryID,long UserID)
            {
                // Tạo mới một Cartitem
                CartItem newItem = new CartItem(productId,CountryID,UserID);

                if (Items.Contains(newItem))
                {
                    foreach (CartItem item in Items)
                    {
                        if (item.Equals(newItem))
                        {
                            item.Quantity++;
                            return;
                        }
                    }
                }
                else
                {
                    newItem.Quantity = CountProduct;
                    Items.Add(newItem);
                }
            }

            /**
	 * SetItemQuantity() - Thay đổi số lượng của sản phẩm trong giỏ hàng
	 */

            public void SetItemQuantity(long productId, long quantity)
            {
                // Nếu số lượng bằng 0 thì xóa item
                if (quantity == 0)
                {
                    RemoveItem(productId);
                    return;
                }

                // Tìm và update số lượng cho item trong giỏ hàng
                CartItem updatedItem = new CartItem(productId);
                foreach (CartItem item in Items)
                {
                    if (item.Equals(updatedItem))
                    {
                        item.Quantity = quantity;
                        return;
                    }
                }
            }

            /**
	 * RemoveItem() - Xóa item trong giỏ hàng
	 */
            public void RemoveItem(long productId)
        {
            CartItem removedItem = new CartItem(productId);
            Items.Remove(removedItem);
        }

            #endregion

            #region Reporting Methods

            /**
	 * GetSubTotal() - Tính tổng tiền
	 */

            public string GetSubTotal()
            {
                decimal subTotal = 0;
                foreach (CartItem item in Items)
                    subTotal += decimal.Parse(item.TotalPrice);

                return NumberUtil.Round(subTotal);
            }


            
            #endregion
        }
    }
}
